package cn.mesmile.admin.modules.system.service;

import java.time.LocalDate;
import java.util.Map;

/**
 * @author zb
 * @Description 用户签到
 * <p>
 *    用户签到
 *    检查用户指定日期是否签到
 *    获取指定月份签到次数
 *    获取指定月份连续签到次数
 *    获取指定月份首次签到日期
 *    获取当月签到情况
 *    参考：https://blog.csdn.net/androidstarjack/article/details/119362689
 * </p>
 */
public interface ISignInService {

    /**
     * 用户签到
     * @param userId 用户id
     * @param localDate 签到日期
     * @return 签到是否成功
     */
    boolean signIn(Long userId, LocalDate localDate);

    /**
     * 检查用户指定日期是否签到  获取指定月份签到次数
     * @param userId 用户id
     * @param localDate 日期
     * @return 是否签到，TRUE 为签到，FALSE 为未签到
     */
    boolean checkSignIn(Long userId, LocalDate localDate);

    /**
     * 获取指定月份签到次数
     * @param userId 用户id
     * @param localDate 日期
     * @return 签到次数
     */
    int getSignInCount(Long userId, LocalDate localDate);

    /**
     * 获取指定月份连续签到次数
     * @param userId 用户id
     * @param localDate 日期
     * @return 连续签到次数
     */
    int getSignInContinuityCount(Long userId, LocalDate localDate);

    /**
     * 获取指定月份首次签到日期
     * @param userId 用户id
     * @param localDate 日期
     * @return 首次签到日期
     */
    LocalDate getFirstSignInByDate(Long userId, LocalDate localDate);

    /**
     * 获取当月签到情况
     * @param userId 用户id
     * @param localDate 日期
     * @return 当月每天签到情况，key为日期，value 为是否签到
     */
    Map<LocalDate, Boolean> getSignInInfo(Long userId, LocalDate localDate);
}
